<!DOCTYPE html>
<html>
<head>
  <title>Advanced Editing</title>
  <link rel="stylesheet" href="style.css">
<script src="toc.js" type="text/javascript"></script>
</head>

<body>

<div id="content">
<img src="header_text_5.png">

<script src="tocgen.js"></script>

<div id="toccontent">

<div id="advtoc">
<div class="subject-header">Advanced Editing Features</div>
</div>

<div id="toc"></div>



<h2>1. Sync Editing</h2>
<p>
In Flowblade Movie Editor sync editing workflow is to <b>set clip's positions to follow another clip's positions</b> on request.
</p>
<ul>
<li> Sync relation between two clips is set by either setting relation individually, doing audio splits or setting sync relation for all clips on a track or a box selection in single action </li>
<li> Clips that have lost sync with their parent clips can be resynced one or more at a time or by resyncing a whole track in single action.</li>
</ul>

<p>
Below we give suggested workflows for three typical use cases for utilizing Flowblade's sync editing features.
</p>
<ul>
<li> Generic work preserving sync editing. </li>
<li> Editing to audio, such as when creating music videos or voice over driven programs. </li>
<li> Dialogue editing. </li>
</ul>



<h3>Setting up Sync Relations</h3>

<p>
There are three ways to set up a sync relation between clips: 
</p>

<h4>Clip Parenting</h4>

<p>
Explicitly set Sync relation between two clips set up by selecting a <b>Sync Parent Clip</b> for a <b>Sync Child Clip</b>.
</p>

<ul>
<li> Click <b>Right Mouse</b> on clip and select <b>Edit->Select Sync Parent Clip...</b>.</li>
<li> Or Click <b>Right Mouse</b> on clip that is part of a multiclip selection and select <b>Select Sync Parent Clip...</b>.</li>
<li> Cursor turns into a Target Cross. Click on a clip to select it as <b>Sync Parent Clip</b>.</li>
</ul>

<h4>Audio Splitting</h4>

<p>
Split a video clip into two clips: a muted video clip as <b>Sync Parent Clip</b> and an audio clip as <b>Sync Child Clip</b>.
</p>

<ul>
<li> Click <b>Right Mouse</b> on clip and select <b>Audio Edit->Split Audio Synched</b>.
<li> When multiple Clips are selected click <b>Right Mouse</b> on clip and select <b>Split Audio Synched</b>.
<li>A new synched Audio Clip/s is placed on audio track, either on V1 or mirrored track based on current preference.</li>
<li> If you select from <b>Sync Properties</b> menu property <b>Auto Sync Split Video Clips on Add</b> video clips will be split automatically when added to certain tracks. 
</li>
</ul>

<h4>Track Auto Parenting</h4>
<p>
Set all clips on track as <b>Sync Child Clips</b> to closest clips on the selected Track as <b>Sync Parent Clips</b>. 
</p>
<ul>
<li> Click <b>Right Mouse</b> on a track in the left side tracks Column area and select <b>Sync All Clips To Track... </b>.</li>
<ul>
<li>Select sync parenting target track using the dialog window.</li>
<li>A sync relation is created for all Clips on Track.</li>
<li>An icon appears on Track Head in in the Tracks Column to indicate that updating sync is now possible.</li>
</ul>
<li>Once a Track has been auto parented it remembers the target track and parenting can be updated by clicking <b>Right Mouse</b> on a Track Head and selecting <b>Update Sync to Clips' Current Positions</b>.</li>
<li> Click <b>Right Mouse</b> on a Track Head and select <b>Clear Sync</b> to clear all sync relations on a Track and info on parenting target Track.</li>
</ul>

<h4>Box Selection Parenting</h4>

<p>
Parent selected clips to the first clip on track closest to track <b>V1</b>.
</p>

<ul>
<li> Drag <b>Left Mouse</b> to select clips on multiple tracks.</li>
<li> Press button <b>Set Sync for All Clips on Track or Box Selection.</b></li>
<li> All selected clips on other tracks are parented to the first clip in selection on track closest to track <b>V1</b>. Clips on track closest to track <b>V1</b> are not parented.
</ul>

<h3>Resyncing</h3>

<h4>Single Clip</h4>
<ul>
<li> Click <b>Right Mouse</b> on Sync Child Clip and select <b>Edit->Resync</b> from popup menu to resync single clip.</li>
<li> Press <b>Resync Selected Clips</b> Button to resync single clip.</li>
</li>
</ul>

<h4>Multiple Clips</h4>
<ul>
<li> Press <b>Resync Selected Clips</b> Button to resync selected clips clip.</li>
<li> Click <b>Right Mouse</b> on <b>Sync Child Clip</b> that is part of a multiclip selection and select <b>Resync</b> from popup menu to resync single clip.</li>
</li>
</ul>

<h4>All Clips on a Track</h4>
<ul>
<li> Select from application menu <b>Edit->Resync Track</b> to resync all clips in the track containing currently selected clip.</li>
<li> Press <b>Resync Track Containing Selected Clip</b> Button to resync all clips in the track containing currently selected clip.</li>
</ul>

<h3>Clearing Sync Parent Relations </h3>
<ul>
<li> Click <b>Right Mouse</b> on Sync Child Clip and select <b>Edit->Clear Sync Relation</b>.</li>
<li> Or Click <b>Right Mouse</b> on clip that is part of a multiclip selection and select <b>>Clear Sync Relations</b>.</li>
</ul>

<h3>Workflows</h3>

<h4> Generic work preserving sync editing</h4>
<p>
Most edits require clips on different tracks to maintain positions relative to each other, such as a title placed on top of a video clip.
</p>
<p>
Many edit actions necessarily change the positions of clips differently on different tracks. Sync editing tools provide quick workflow to regain sync between clips.
</p>
<ul>
<li> It is often useful to treat track <b>V1</b> as a master track, and have all other tracks relate positions to track <b>V1</b>.</li>
<li> Set sync relations for individual or multiple selected clips.</li>
<li> If there exists many clips of similar type that require syncing, dedicate a track to that type of clips and use track syncing features to keep that track in sync.</li>
<li> If program features multiple clearly defined complex scenes one approach is to:
    <ul>
    <li> Parent first clip of the scene on each track to the first clip of scene on track <b>V1</b>.  <i>Box Selection Parenting</i> can be a useful action to get this done quickly.</li>
    <li> Use <b>Spacer</b> tool with <b>Control</b> modifier to sync tracks manually at scene start when needed.</li>
    <li> Or use track syncing.</li>
    </ul>
</li>
</ul>


<h4>Editing to audio</h4>
<p>
When creating music videos or voice over driven programs it is useful to use a single audio track as sync target track for most are all other elements in the sequence.</li>
</p>

<ul>
<li> Place the program defining audio of track <b>A1</b> and treat that as a master track.</li>
<li> Have all other tracks and clips relate their positions to track <b>A1</b>.</li>
<li> With music videos it is useful to use a large number of track dedicated to individual types of visual elements, and use exclusively track syncing features instead of setting sync to individual clips.</li>
</ul>

<h4> Dialogue editing</h4>
<p>
Editing dialogue scenes frequently require actor's voice to start before or end after the image of the character speaking. These types of edit are knowns as J- and L-cuts.
</p>
<ul>
<li> Dedicate tracks <b>V1</b>, <b>V2</b>, <b>A1</b> and <b>A2</b> to dialogue video and audio.</li>
<li> Select from <b>Sync Properties</b> menu on the left behaviour that suits your preferences.
    <ul>
    <li> <b>Auto Sync Split Video Clips on Add</b> has multiple options to select which tracks do this.</li>
    <li> <b>Audio Split To Mirrored Track</b> behaviour can be turned on and off.</li>
    </ul>
</li>
<li> When creating J- or L-cuts use methods that maintain sync to minimize the need to resync:
    <ul>
    <li> When using <b>Trim</b> tool, use <i>Two Roll Trim</i> instead of <i>One Roll Trim</i>.</li>
    <li> When dragging clip ends use <b>Alt</b> modifier to do <b>Clip End Overwrite Drag</b> actions.</li>
    </ul>
</li>
<li> Use exclusively track resyncing actions to keep audio on tracks <b>A1</b> and <b>A2</b> synced.</li>
</ul>


<h3>Sync UX</h3>
<h4>Buttons</h4>

<p>
There are 4 buttons in the <b>Middlebar</b>, from left to right:
</p>
    <ul>
     <li><b>Split Audio Synched</b></li>
     <li><b>Set Sync for All Clips on Track or Box Selection.</b> If a box selection is active then <i>Box Selection Parenting</i> is done, othrewise a <i>Track Auto Parenting</i> action is performed</li>
     <li><b>Resync Track Containing Selected Clip/s</b></li>
     <li><b>Resync Selected Clips</b></li>
     </ul>
<h4>Menus</h4>
<p>
There are 4 menus available at various places to provide sync editing functionality:
</p>
<ul>
 <li><b>Sync Properties Menu</b> above <b>Tracks Column</b> allows for setting sync editing properties.</li>
 <li><b>Track Menu</b> available in <b>Tracks Column</b> provides track sync actions.</li>
 <li><b>Clip Menu</b> provides sync actions applied to single clips.</li>
 <li><b>Multi Clip Selection Menu</b> provides sync actions applied to multiple clips.</li>
 </ul>
 
<h4>Timeline</h4>
<p>
Visually clip's sync state is displayed as follows:
</p>
<ul>
<li> Red box with a number means that clip is not in sync with parent.</li>
<li> Displayed number gives info on how many frames a clip's position is away from being synched.</li>
<li> Optionally a line is drawn between parent and child clip.</li>
</ul>


<h2>2. Advanced Project Actions </h2>



<h3>Combining Sequences</h3>
<p>
It is possible to import full contents of another Sequence into Sequence currently being edited.
</p>

<ol>
<li> Select <b>Sequence->Import Another Sequence into this Sequence...</b></li>
<li> Select Import action.</li>
<ul>
<li> <b>Append Sequence</b> adds imported Sequence at the end of current Sequence</li>
<li> <b>Insert Sequence at Playhead Position</b> creates a cut at playhead position and inserts imported Sequences at that position</li>
</ul>
<li> Select a Sequence to Import</li>
<ul>
<li> <b>Note that you obviously need at least two Sequences to exist to do any import actions.</b></li>
</ul>
<li> Press <b>Import</b> button to execute import.</li>
</ol>

<h3>Split part of Sequence to new Sequence</h3>

<ol>
<li> Select <b>Sequence->Split to new Sequence at Playhead position</b></li>
<li> After confirmation dialog the a new Sequence with contents of source Sequence after playhead position will be created and made active.</li>
</ol>

<h3>Importing Media from another Project</h3>

<p>
You can import Media Items from another Project.
</p>

<ol>
<li> Select <b>Project->Import Media From Project...</b></li>
<li> Select a Project file from file system.</li>
<li> Media items that are not present in current Project will be opened in the current bin. Note that it takes a few seconds to load the project before new Media Items begin to appear.</li>
</ol>



<h2>3. Timeline Audio Syncing</h2>

<p>
You can make a clip to move to a position in timeline in which its audio is in sync with audio of another clip on timeline.
</p>

<p>
This enables you to do simplified version of multicam editing on the timeline.
</p>

<ol>
<li> Open context menu with <b>Right Mouse</b> on Clip you wish to sync with some other clip.</li>
<li> Select menu item <b>Audio->Select Clip to Audio Sync With...</b>. The cursor changes to a targeting cross.</li>
<li> Click on Clip you wish to audio sync with.</li>
<li> A dialog opens giving info on the sync action that is to be done to sync clips.</li>
<li> Press <b>Do Audio Sync Move Edit</b> button to do the syncing edit.</li>
<li> It is usually a good idea to mute one of the synched clips</li>
</ol>

<div class="note">
Audio syncing looks for best mathematical match between two audio waveforms, so <b>audio syncing non-matching audio will produce random results.</b>
</div>


<h2>4. Slow / Fast Motion and Reverse</h2>

<p>
In Flowblade there are two ways to do motion effects:
</p>
<ul>
<li> Changing Clip Speed and direction in Timeline</li>
<li> Creating new New Media Items in Bins</li>
</ul>


<h3> Changing Timeline Clip Speed and direction</h3>
<h4> Creating Slow / Fast Motion Clips </h4>
<ol>
<li> Right click on a Timeline Clip File and select <b>Slow Motion -> Slow / Fast</b> from popup menu.</li>
<li> Edit parameters for the new motion Clip</li>
<ul>
<li> Set speed</li>
<li> Set encoding and quality</li>
<li> Select render range, either:</li>
<ul>
<li> Current Clip Content</li>
<li> Full Media</li>
</ul>
</ul>
<li> Click <b>Render</b> button to create a new motion Timeline Clip.</li>
</ol>

<h4> Creating Reverse Motion Clips</h4>
<ol>
<li> Right click on a Timeline Clip File and select <b>Slow Motion -> Reverse</b> from popup menu.</li>
<li> Edit parameters for the new motion Clip</li>
<ul>
<li> Set speed</li>
<li> Set encoding and quality</li>
<li> Select render range, either:</li>
<ul>
<li> Current Clip Content</li>
<li> Full Media</li>
</ul>
</ul>
<li> Click <b>Render</b> button to create a new reverse Timeline Clip.</li>
</ol>

<h3> Creating Motion Media Items </h3>
<h4> Creating Slow / Fast Media Items </h4>
<ol>
<li> Right click on a Media File and select <b>Render Slow / Fast Motion File</b> from menu</li>
<li>Edit parameters for the new motion Clip
<ul>
<li> Set speed</li>
<li> Give name and location for motion Clip </li>
<li> Select rendering parameters for motion Clip. It is probably a good idea to use a <b>lossless format</b> here to avoid any generational quality losses.</li>
<li> Select render range, either:</li>
<ul>
<li> Full Source Clip</li>
<li> From Source Clip Mark In to Mark Out</li>
</ul>
</ul>
<li> Click <b>Render</b> button to create a new motion Media Item</li>
</ol>

<h4> Creating Reverse Media Items </h4>
<ol>
<li> Right click on a Media File and select <b>Render Reverse Motion File</b> from menu</li>
<li>Edit parameters for the new motion Clip
<ul>
<li> Set speed</li>
<li> Give name and location for reverse Clip </li>
<li> Select rendering parameters for reverse Clip. It is probably a good idea to use a <b>lossless format</b> here to avoid any generational quality losses.</li>
<li> Select render range, either:</li>
<ul>
<li> Full Source Clip</li>
<li> From Source Clip Mark In to Mark Out</li>
</ul>
</ul>
<li> Click <b>Render</b> button to create a new reverse Media Item</li>
</ol>

<a name="filtermasking"></a>
<h2>5. Filter Masking</h2>

<p>
Filter masking allows for one or more filters to be applied only on some user defined part of image</b>.
</p>

<img src="filter_mask.png">
<p>
<i>1) Filter masking menu launch button above red triangle, 2) Filters editor after adding mask with all filter edit panels minified. Mask - Begin and Mask - End filters define which filters are masked.</i>
</p>

<ol>
<li> Click Filter Mask Menu launch button and select if you wish to apply mask on one or all filters.</li>
<li> In submenu select mask <b>Alpha Shape</b>, <b>Alpha Shape Motion Tracked</b>, <b>Luma Key</b>, <b>Video/Image File Alpha</b>, <b>Video/Image File Luma</b> or <b>Color Select</b>.</li>
<li> Edit mask parameters in filter edit panel for <b>Mask - Begin</b> filter.</li>
<li> You can movefilters in and out of the masked range of filter stack.</li>
<ul>
</ol>

<h2>6. Motion Tracking</h2>
<p>
    When creating a motion tracking effect we are usually dealing with two image sources: one that contains the image element that is being tracked, and an another image that follows the tracked image element. 
</p>
<p>
When using motion tracking to create a tracking filter mask, then both tracking data source clip and the clip that has the masked filter applied are usually the same clip. 
</p>
<p>
    Flowblade implements motion tracking by providing two filters and a filter mask. Filters are:
</p>
<ul>
<li> <b>Motion Tracking Create</b> This filter creates the tracking data based on region of image and algorithm selected by the user.</li>
<li> <b>Motion Tracking Apply</b> This filter applies tracking data on another image to follow the image element that was the source of the tracking data.
</ul>
<p>
    Motion tracked masked filtering uses <b>Filter Mask: Alpha Shape Motion Tracked</b>, see below.
</p>

<h3>Filter: Motion Tracking Create</h3>
<p>
    Add this filter to clip that contains the image element you wish to track.
</p>
<h4>Parameters</h4>
<p>
    <b>Rectancle GUI Editor</b> Set the red rectangle on the image element you wish to track. 
</p>
<p>
    Tracking always starts from first frame of clip, so use the first frame to position the rectangle.
</p>
<p>
    If you like tracking to start in the middle of a clip, then cut clip at that point to create a new clip that has the first frame at the position you wish the tracking to start.
</p>
<p>
    <b>Keyframe Step</b> This sets the interval in frames between keyframes in the created tracking data. So e.g. value 5 creates a keyframe every 5 frames.
</p>
<p>
    <b>Algorithm</b> Algorithm used to create the tracking data.
</p>

<ul>
<li>
<b>KCF - Kernelized Correlation Filters</b> Accuracy and speed better than MIL. This also reports tracking failure better than MIL. Does not recover from full occlusion.
</li>
<li>
<b>MIL - Multiple Instance Learning</b> Performance is quite good, can work when presented with partial occlusion. Tracking failure not reported reliably. Does not recover from full occlusion.
</li>
<li>
<b>MEDIANFLOW</b> 
Excellent tracking failure reporting. Works very well when the motion is predictable and there is no occlusion. Fails under large motion.
</li>
<li>
<b>MOSSE - Minimum Output Sum of Squared Error</b> MOSSE tracker is robust to variations in lighting, scale, pose, and non-rigid deformations. It also detects occlusion and can pause and resume where it left off when the object reappears.
</li>
<li>
<b>CSRT</b> Among these algorithms CSRT often shows comparatively better accuracy and resistance to overlapping by other objects. Speed is quite low, and operation is unstable when the object is lost.
</li>
</ul>
<p>
    <b>Create Motion Tracking Data</b> Pressing this button creates a motion tracking data labeled with name given in the text entry box above. After creation data can be used with <b>Motion Tracking Apply</b> filter or <b>Filter Mask: Alpha Shape Motion Tracked</b>.
</p>

<h4>Workflow</h4>
<ol>
<li>Make sure playhead is on the first frame of the tracked clip.</li>
<li>Place red rectangle on top of the tracked image element.</li>
<li>Set parameters and give the data to be created an identifying name.</li>
<li>Press <b>Create Motion Tracking Data</b> and wait for the data render to complete.</li>
<li>Check results by moving the playhead around.</li>
<li>Press <b>Clear Data</b> button if you wish to try again with different parameters or tracking area definition.</li>
</ol>

<h3>Filter: Motion Tracking Apply</h3>
<p>
    Add this filter to the clip that contains the image that you wish to make follow the tracked image element.
</p>
<p>
    Place the clip with tracking image on top of the clip with tracked image and apply cropping if necessary.
</p>

<h4>Parameters</h4>
<p>
    <b>Select Motion Tracking Data</b> Select the labeled tracking data created from tracking image element you wish to track.
</p>
<p>
    Tracking always starts from first frame of clip.
</p>
<p>
    If you like tracking to start in the middle of a clip, then cut that clip at that point to create a new clip that has the first frame at the position you wish tracking to start.
</p>
<p>
    <b>Tracking Coords Interpretation</b> 
</p>
<ul>
<li>
<b>Absolute</b> Places the top left corner of the image to the top left corner of the tracking data box.
</li>
<li>
<b>Top Left Justified</b> Places the top left corner of image to the top left corner of screen in the first frame of tracking, and then moves image relatively as specified by tracking data. This is useful e.g. when making a text created in <b>Titler</b> (that is placed initially correctly) keep position when tracking data is applied.
</ul>
<p>
    <b>X Offset</b> Moves image in the horizontal direction in relation to the position defined by tracking data.
</p>
<p>
    <b>Y Offset</b> Moves image in the vertical direction in relation to the position defined by tracking data.
</p>
<p>
    <b>Size</b> If set to <b>Scale To Box</b> image is scaled to fit the box defined by tracking data.
</p>
<p>
    <b>Apply Motion Tracking Data</b> Applies selected tracking data with user specified parameters as motion of the clip.
</p>


<h4>Workflow</h4>
<ol>
<li>Use <b>Select Motion Tracking Data</b> dropdown menu to select which tracking data to apply.</li>
<li>Set parameters to fine tune tracked motion.</li>
<li>Press <b>Apply Motion Tracking Data</b> button to make clip image follow tracked motion.</li>
<li>If needed, change parameters and press <b>Apply Motion Tracking Data</b> button again to get changed motion.</li>
</ol>

<h3>Filter Mask: Alpha Shape Motion Tracked</h3>
<p>
Add this Filter Mask to clip that contains the image element you wish to apply masked filtering on.
</p>

<p>
A typical use would be to e.g. blur a person's face to make them unrecognizable.
</p>

<h4>Parameters</h4>
<p>
    <b>Select Motion Tracking Data</b> Select the labeled tracking data created from tracking image element you wish to track.
</p>
<p>
    Tracking always starts from first frame of clip.
</p>
<p>
    If you like tracking to start in the middle of a clip, then cut that clip at that point to create a new clip that has the first frame at the position you wish tracking to start.
</p>
<p>
    <b>X Offset</b> Moves filtered area in the horizontal direction in relation to the position defined by tracking data.
</p>
<p>
    <b>Y Offset</b> Moves filtered area in the vertical direction in relation to the position defined by tracking data.
</p>
<p>
    <b>Scale</b> Makes filtered area smaller or larger.
</p>
<p>
    <b>Apply Motion Tracking Data</b> Applies selected tracking data with user specified parameters as a Filter Mask.
</p>

<h4>Workflow</h4>
<ol>
<li>See above how to <a href="#filtermasking">add a Filter Mask</a>. Select Filter Mask <b>Alpha Shape Motion Tracked</b>.</li>
<li>Set mask parameters.</li>
<li>Press <b>Apply Motion Tracking Data</b> to create a motion tracked filter mask.</li>
</ol>


<h2>8. Stabilizing</h2>
<p>
    In Flowblade stabilizing a video clip is implemented using filter <b>Stabilize</b> available in filter category <b>Movement or by creating a new, stabilized Media Item.</b>. 
</p>
<p>
    This filter requires two passes. The first pass performs analysis and stores the result internally in a file. After completed analysis stabilizing can be applied using the created data.
</p>

<h4>Parameters</h4>
<p>
    <b>Analysis Shakiness</b> Used during analysis. How shaky the video is.
</p>
<p>
    <b>Accuracy</b> Used during analysis. The accuracy of shakiness detection.
</p>
<p>
    <b>Smoothing</b> Used during application. Number of frames for lowpass filtering (2N + 1 frames).

</p>
<p>
    <b>Zoom</b> Used during application. Additional zoom amount.
</P>
<p>
    <b>Analyze Video</b> Pressing this button analyzes video and saves the created data internally. Upon completion stabilizing is applied and can be controlled using <b>Smoothing</b> and <b>Zoom</b> parameters.
</p>



<h4>Creating Stabilized Media Item</h4>

<ul>
<li>
Select <b>Render Stabilized File</b> item from <i>Media Item</i> <b>Right mouse</b> context menu.
</li>
</ul>


<h2>9. Credits Scroll Generator</h2>
<h3>Overview</h3>
<p>
Flowblade offeres a <b>Credits Scroll Generator</b> to easily create title sequences. 
</p>

<p>
<b>Credits Scroll Generator</b> has a number of editors to set <i>initial</i> properties of text font and layout.
Displayed text and commands to modify text presentation is inputted in text editor box in the <i>Text</i> panel. 
</p>

<p>
    Text is given using a <i>light weight markup syntax</i> that accepts three types of input: <b>credit blocks, section titles</b> and <b>commands</b>.  
</P>

<h3>Credit Blocks</h3>
<p>
    <b>Credit block</b> is a block of text beginning with a line starting with '#' followed by credit text, followed by one or more sequential lines giving names associated with the credit.
</p>
<p>
    <b>Credit block</b> ends when empty line is encountered.
</p>

<div class="code-text">
<p>    # Camera operators </p>
<p>    Donald Drake </p>
<p>    Earl Easter </p>
</div>

<h3>Section Titles</h3>
<p>
    <b>Section Title</b> is a single line of text starting with '##' and followed by section title text.
</p>

<div class="code-text">
<p>    ## Camera crew in Antarctica </p>
</div>


<h3>Commands</h3>

<p>
    <b>Command</b> is a single line of text starting with '!' and followed by command arguments.
</p>

<p>
    <b>Command</b> lines change font and layout properties from the ones given initially by user or do some other additional changes in the way that text is presented.
</p>

<div class="code-text">
<p>  ! set-layout single-line-sides-justified</p>
</div>

<h3>Commands List</h3>
<p>
<b>ypad</b> ypad <i>PIXELS</i> 
</p>

<p> Adds padding between credit items.
</p>
<p>
E.g. <i>! ypad 40</i>
</p>
<p>
<b>set-layout</b> set-layout <i>[single-line-centered | two line-centered |  single-line-right-justified |  two-line-right-justified |  single-line-sides-justified | two-line-left-justified | two-columns-centered ]</i> 
</p>
<p> 
Switches to use defined credit item layout.
</p>
<p> 
E.g. <i>! set-layout single-line-sides-justified</i>.
</p>

<p>
<b>text-case</b> <i>[ credit | name ] [ no-changes | uppercase | lowercase ]</i>
</p>    


<p>
Sets credit or name text to be uppercase, lowercase or as written.
</p>    

<p>
E.g. <i> ! text-case name lowercase </i>
</p>

<p>
<b>page</b> <i>[ PAGELENGHT]</i>
</p>    


<p>
Begins new text page if animation set to be paged. Optionally sets length of time page is displayed in frames. If no time is given, the user set default value is used.
</p>    

<p>
E.g. <i> ! page 230 </i>
</p>

<p>
    <b>font-size</b> <i>[ credit | name ] FONTSIZE</i>
</p>
<p>
Sets font size for credit or name text.
</p>    
<p>
    E.g. <i>! font-size credit 100</i>
</p>

<p>
    <b>font-family</b> <i>[ credit | name ] FONTFAMILY</i>
</p>

<p>
Sets font family for credit or name text. Available values for <i> FONTFAMILY</i> depend on system.
</p>
<p>    
E.g. <i>! font-family credit Ubuntu Sans</i>
</p> 
<p> 
 <b>font-face</b> <i>[ credit | name ] [ regular | italic | bold ]</i> 
</p>
<p>
Sets font face for credit or name text.
</p>
<p>    
E.g. <i>! font-face name italic</i>
</p>

<p> 
<b>font-property </b> <i>[ credit | name ] [alignment | color-rgba | fill-on | outline-color-rgba | outline-on | outline-width | shadow-on | shadow-color-rgb | shadow-opacity | shadow-xoff | shadow-yoff | shadow-blur | gradient-color-rgba | gradient-direction ] PROPERTYVALUE </i>
</p>
<p>
Sets value for named font property for credit or name text. Allowed <i>PROPERTYVALUE</i> values are different for different named properties. 
</p>

<p>    
<i>Font Properties</i>
</p>
<table>
<thead>
<tr>
<th>Property               </th><th> Value type</th><th>Example</th>
</tr>
</thead>
<tr>
<td>    color-rgba     </td><td> color tuple </td><td>  color-rgba (1.0,0.0,0.0,1.0) </td>
</tr>
<tr>
<td>    fill-on     </td><td> boolean </td><td> fill-on False </td>
</tr>
<tr>
<td>    outline-color-rgba     </td><td> color tuple  </td><td> outline-color-rgba (1.0,0.0,0.0,1.0)  </td>
</tr>
<tr>
<td>      outline-on   </td><td> boolean </td><td>    outline-on True </td>
</tr>
<tr>
<td>  outline-width       </td><td>  int <i>(pixels)</i> </td><td>  outline-width 4 </td>
</tr>
<tr>
<td>   shadow-on      </td><td> boolean </td><td>  shadow-on True </td>
</tr>
<tr>
<td>    shadow-color-rgb</td><td> color tuple  </td><td>   shadow-color-rgb (1.0,0.0,0.0,1.0) </td>
</tr>
<tr>
<td> shadow-opacity   </td><td> int[0-100] </td><td> shadow-opacity 50</td>
</tr>
<tr>
<td>  shadow-xoff  </td><td> int <i>(pixels)</i></td><td>  shadow-xoff 10 </td>
</tr>
<tr>
<td>  shadow-yoff  </td><td> int <i>(pixels)</i></td><td> shadow-yoff 7 </td>
</tr>
<tr>
<td>  shadow-blur </td><td>  int <i>(pixels)</i> </td><td>   shadow-blur 8 </td>
</tr>
<tr>
<td>  gradient-color-rgba  </td><td> color tuple </td><td>  gradient-color-rgba  (1.0,0.0,0.0,1.0) </td>
</tr>
<tr>
<td>   gradient-direction </td><td> int[0,1] <i>(VERTICAL = 0
HORIZONTAL = 1)</i></td><td>  gradient-direction 1 </td>
</tr>
</table>

<p>    
E.g. <i>! font-property credit color-rgba (1.0,0.0,0.0,1.0)
</p>
<p>    
! font-property name outline-on True
</p>
<p>    
! font-property credit  shadow-yoff 7 
</p>
<p>    
! font-property name gradient-direction 1</i> 
</p>

<p>
<b>set-layout-property</b> <i>[ center-gap | line-gap | credit-block-gap | justified-x | justified-x-off | name-y-off | name-x-off | section-title-alignment ] PROPERTYVALUE </i>
</p>

<p>
Sets layout property value. <i>PROPERTYVALUE</i> integer value for number of pixels or pixel position.
</p>

<table>
<thead>
<tr>
<th>Property               </th><th> Description</th>
</tr>
</thead>
<tr>
<td>    center-gap    </td><td> Gap between name and credit when on same line. </td>
</tr>
<tr>
<td>  line-gap    </td><td> Gap between lines. </td>
</tr>
<tr>
<td>    credit-block-gap   </td><td> Gap between credit blocks. </td>
</tr>
<tr>
<td>   justified-x    </td><td> Position of justified edge when using justified text layouts.  </td>
</tr>
<tr>
<td>   justified-x-off   </td><td>Sets column width in "Single Line Sides Justified" layout.</td>
</tr>
<tr>
<td>    name-y-off  </td><td> Y offset of name position from default position in current layout. </td>
</tr>
<tr>
<td>     name-x-off  </td><td> X offset of name position from default position in current layout.  </td>
</tr>
<tr>
<td>     section-title-alignment </td><td>  Sets section titles to be either centered or edge justified using justified-x value.</td>
</tr>
</table>

<p>    
E.g. <i>! set-layout-property name-y-off -100</i>
</p>


<h2>10. Jog / Shuttle Support</h2>


<h3>Overview</h3>

<p>
Flowblade has a USB Human Input Device subsystem, which is capable of
supporting selected USB jog/shuttle devices.
</p>

<p>
A jog/shuttle gives you an additional way to navigate through your timeline
using a dedicated hardware control interface, in addition to the keyboard and
mouse.
</p>
<p>
Turning the jog wheel moves the playback location forward and backward, one
frame at a time.
</p>
<p>
Turning the shuttle left or right engages variable speed playback, in forward
or reverse. The farther you turn the ring, the faster it goes.
</p>
<p>
Additionally, most jog/shuttle devices have keys which can be mapped to
various actions within the program. Each supported device has default key
mappings, which can also be customized.
</p>

<h3>Supported Devices</h3>

<table>
<thead>
<tr>
<th>Manufacturer Device Name</th><th>Flowblade Device Name</th><th>Config File</th>
</tr>
</thead>
<tr>
<td>Contour Design ShuttlePRO v2</td><td>Contour Design ShuttlePRO v2</td><td>contour_design_shuttlepro_v2.xml</td>
</tr>
<tr>
<td>Contour Design ShuttleXpress</td><td>Contour Design ShuttleXpress</td><td>contour_design_shuttlexpress.xml</td>
</tr>
<tr>
<td>Contour A/V Solutions SpaceShuttle</td><td>Contour Design ShuttleXpress</td><td>contour_design_shuttlexpress.xml</td>
</tr>
</table>

<h3>Enabling Jog / Shuttle Support</h3>
<p>
Jog/shuttle support is not on by default in Flowblade, and must be enabled.
</p>
<p>
Additionally, Flowblade will not be able to access the USB device without
a small amount of operating system configuration to grant permissions so that
Flowblade is allowed to use the device.
</p>
<h4>Enable Device Permissions</h4>

<div class="important">
For Flatpaks and correctly created distro packages the required file has been added as part of the package. If for some reason the application is not able to access the USB device, try adding the file manually.</b>
</div>

<p>
In order for Flowblade to be able to read from the USB device, it is
necessary to tell your operating system to grant permissions on the device
to non-root users.
</p>
<p>
On Linux, this is done by adding a udev rules configuration file that
instructs the udev subsystem to enable additional access to your device.
</p>
<p>
Become the root user, and create a new text file at
`/etc/udev/rules.d/90-flowblade.rules` with the following contents:
</p>

<div class="code-text">
<p># Grant unprivileged users access to USB HID jog/shuttle devices</p>

<p># Contour Design ShuttleXpress, Contour A/V Solutions SpaceShuttle</p>
<p>ATTRS{idVendor}=="0b33", ATTRS{idProduct}=="0020", MODE="0666"</p>

<p># Contour Design ShuttlePRO v2</p>
<p>ATTRS{idVendor}=="0b33", ATTRS{idProduct}=="0030", MODE="0666"</p>
</div>

<p>
It may be necessary to reboot your computer after this step. This only
needs to be done once. It is also possible to tell the udev subsystem
to reload the config file instead of rebooting, but this is left as an
exercise for the reader.
</p>
<p>
<b>Don't forget to drop your root privileges after this step, before starting
Flowblade! Do not run Flowblade as root!</b>
</p>

<h4>Tell Flowblade to Use the Device</h4>

<p>
The next step is opening Flowblade, and enabling your device.
</p>
<p>
Go to the <b>Edit</b> menu, select <b>Preferences</b>, and then navigate over
to the <b>Jog/Shuttle</b> tab.
</p>
<p>
Check the <b>USB Jog/Shuttle Enabled</b> checkbox.
</p>
<p>
In the <b>Device</b> pull down menu, select the device driver that you wish to
use. The entries in this menu correspond to the <b>Flowblade Device Name</b> in
the <b>Supported Devices</b> section above.
</p>
<p>
Press <b>OK</b> to close the <b>Preferences</b> window.
</p>
<p>
After this, it will be necessary to exit Flowblade and restart it.
</p>
<p>
At this point, the USB jog/shuttle configuration is part of your saved
Flowblade preferences. You will now be able to use the program with or
without the jog/shuttle, without any further configuration necessary.
</p>
<p>
Please note that Flowblade will only check for the presence of the USB device
at startup, so make sure to have the device plugged in before you start
Flowblade if you want to use it.
</p>

<h3>Custom Key Mappings</h3>

<p>
Flowblade ships with XML config files that provide default key mappings
between the keys on your USB jog/shuttle device, and various actions in
Flowblade. It is possible to customize these mappings, by copying the
appropriate file into the correct user preferences directory, and modifying
the local copy.
</p>
<p>
The precise location of these config files can vary depending on how you
have installed Flowblade. You want to find the `res/usbhid` directory
under the Flowblade installation. From there, you will want to copy the config
file for your particular USB jog/shuttle device to a location in your local
user preferences directory.
</p>
<p>
For example, if you installed Flowblade on Ubuntu using the OS packaging
system, and you have a Contour Design ShuttleXpress, then you would want to
copy the
`/usr/share/flowblade/Flowblade/res/usbhid/contour_design_shuttlexpress.xml`
file into
`.local/share/flowblade/user_usbhid/contour_design_shuttlexpress.xml` under
your home directory.
</p>
<p>
Open up the new local copy of the file under your home directory in a text
editor. You will see more information in the comments of the file about how
the keys are laid out on your particular device. Under the _keymap_ section
of the config file, you can edit the _code_ settings to point to different
_target actions_ that Flowblade can perform, for each of the keys on the
device.
</p>
<p>
Once your file is complete, save and close the file, and start Flowblade.
Now your new custom key mappings will be in effect every time you run the
program.
</p>
<p>
Take care not to introduce any XML errors into the file, or Flowblade will
not be able to process it correctly.
</p>
<p>
See the next section for all of the target actions that can be mapped to
the keys on your device.
</p>
<h4>Available Target Actions</h4>

<table>
<thead>
<tr>
<th>Target Action               </th><th> Description</th>
</tr>
</thead>
<tr>
<td>3_point_overwrite           </td><td> Three Point Overwrite
</tr>
<tr>
<td>add_marker                  </td><td> Add Marker</td>
</tr>
<tr>
<td>append                       </td><td>Append</td>
</tr>
<tr>
<td>append_from_bin              </td><td> Append Selected Media From Bin</td>
</tr>
<tr>
<td>clear_io_marks               </td><td> Clear In/Out Marks</td>
</tr>
<tr>
<td>clear_mark_in                </td><td> Clear Mark In</td>
</tr>
<tr>
<td>clear_mark_out               </td><td> Clear Mark Out</td>
</tr>
<tr>
<td>cut                          </td><td> Cut Active Tracks</td>
</tr>
<tr>
<td>cut_all                      </td><td> Cut All Tracks</td>
</tr>
<tr>
<td>delete                       </td><td> Delete</td>
</tr>
<tr>
<td>display_clip_in_monitor      </td><td> Display Clip In Monitor</td>
</tr>
<tr>
<td>display_sequence_in_monitor  </td><td> Display Current Sequence In Monitor</td>
</tr>
<tr>
<td>enter_edit                   </td><td> Enter Editing Mode</td>
</tr>
<tr>
<td>faster                       </td><td> Faster</td>
</tr>
<tr>
<td>insert                       </td><td> Insert</td>
</tr>
<tr>
<td>lift                         </td><td> Lift</td>
</tr>
<tr>
<td>log_range                    </td><td> Log Range</td>
</tr>
<tr>
<td>mark_in                      </td><td> Mark In</td>
</tr>
<tr>
<td>mark_out                     </td><td> Mark Out</td>
</tr>
<tr>
<td>next_cut                     </td><td> Go To Next Cut</td>
</tr>
<tr>
<td>next_frame                   </td><td> Go To Next Frame</td>
</tr>
<tr>
<td>nudge_back                   </td><td> Nudge Move Selection Back 1 Frame</td>
</tr>
<tr>
<td>nudge_back_10                </td><td> Nudge Move Selection Back 10 Frames</td>
</tr>
<tr>
<td>nudge_forward                </td><td> Nudge Move Selection Forward 1 Frame</td>
</tr>
<tr>
<td>nudge_forward_10             </td><td> Nudge Move Selection Forward 10 Frames</td>
</tr>
<tr>
<td>open_next                    </td><td> Open Next Media Item In Monitor</td>
</tr>
<tr>
<td>open_prev                    </td><td> Open Previous Media Item In Monitor</td>
</tr>
<tr>
<td>overwrite_range              </td><td> Overwrite Range</td>
</tr>
<tr>
<td>play                         </td><td> Play</td>
</tr>
<tr>
<td>play_pause                   </td><td> Play / Pause</td>
</tr>
<tr>
<td>play_pause_loop_marks        </td><td> Play / Pause Mark In to Mark Out Loop</td>
</tr>
<tr>
<td>prev_cut                     </td><td> Go To Previous Cut</td>
</tr>
<tr>
<td>prev_frame                   </td><td> Go To Previous Frame</td>
</tr>
<tr>
<td>resync                       </td><td> Resynchronization</td>
</tr>
<tr>
<td>select_next                  </td><td> Open Next Clip In Filter Editor</td>
</tr>
<tr>
<td>select_prev                  </td><td> Open Previous Clip In Filter Editor</td>
</tr>
<tr>
<td>sequence_split               </td><td> Sequence Split</td>
</tr>
<tr>
<td>slower                       </td><td> Slower</td>
</tr>
<tr>
<td>stop                         </td><td> Stop</td>
</tr>
<tr>
<td>switch_monitor               </td><td> Switch Monitor Display</td>
</tr>
<tr>
<td>to_end                      </td><td> Go To End</td>
</tr>
<tr>
<td>toggle_ripple                </td><td> Toggle Ripple</td>
</tr>
<tr>
<td>to_mark_in                   </td><td> Go To Mark In</td>
</tr>
<tr>
<td>to_mark_out                  </td><td> Go To Mark Out</td>
</tr>
<tr>
<td>to_start                     </td><td> Go To Start</td>
</tr>
<tr>
<td>trim_end                     </td><td> Trim Clip End To Playhead</td>
</tr>
<tr>
<td>trim_start                   </td><td> Trim Clip Start To Playhead</td>
</tr>
<tr>
<td>zoom_in                      </td><td> Zoom In</td>
</tr>
<tr>
<td>zoom_out                     </td><td> Zoom Out</td>
</tr>
</table>


</div>
</div>
</div>


</body>

</html> 
